package com.saris.primego.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.customizers.OpenApiCustomizer;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;

@Configuration
public class Knife4jConfig {

    // //把导航栏最上面的Swagger Models 显示为"数据模型"
    @Bean
    public OpenApiCustomizer modelTitleCustomizer(){
        return openApi -> {
            openApi.getExtensions().put("x-knife4j-model-title", "数据模型");
        };
    }


    // 全局配置
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("鲜行者 Spring Boot 3 API")
                        .version("1.0")
                        .contact(new Contact()
                                .name("Saris Liu")
                                .email("1216441399@qq.com")
                                .url("https://github.com/saris/Saris")
                        )
                        .description("鲜行者API Documentation"));
    }

    /**
     * 所有分组在下拉框中排序，Order注解不起作用，实际是按照group（名字）名字字母排序的。
     */
    // 配置小程序服务服务分组
    @Bean
    @Order(1)
    public GroupedOpenApi defaultApi() {
        return GroupedOpenApi.builder()
                .group("default")
                .displayName("全部接口")
                .pathsToMatch("/**")
                .packagesToScan("com.saris.primego.web.controller")
                .build();
    }

    // 配置小程序服务服务分组
    @Bean
    @Order(2)
    public GroupedOpenApi userApi() {
        return GroupedOpenApi.builder()
                .group("user-service")
                .displayName("小程序服务")
                .pathsToMatch("/user/**")
                .packagesToScan("com.saris.primego.web.controller.user")
                .build();
    }

    // 配置管理端服务分组
    @Bean
    @Order(3)
    public GroupedOpenApi adminApi() {
        return GroupedOpenApi.builder()
                .group("endpoint-service")
                .displayName("管理端服务")
                .pathsToMatch("/admin/**")
                .packagesToScan("com.saris.primego.web.controller.admin")
                .build();
    }
}
